package com.papercutting.platform.dto.request;

import lombok.Data;

import javax.validation.constraints.*;
import java.io.Serializable;

/**
 * 教程请求
 */
@Data
public class TutorialRequest implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    /**
     * ID（更新时需要）
     */
    private Long id;
    
    /**
     * 标题
     */
    @NotBlank(message = "标题不能为空")
    @Size(max = 200, message = "标题长度不能超过200个字符")
    private String title;
    
    /**
     * 副标题
     */
    @Size(max = 200, message = "副标题长度不能超过200个字符")
    private String subtitle;
    
    /**
     * 封面图片
     */
    @Size(max = 500, message = "封面图片URL长度不能超过500个字符")
    private String coverImage;
    
    /**
     * 简介
     */
    @Size(max = 500, message = "简介长度不能超过500个字符")
    private String summary;
    
    /**
     * 详细内容
     */
    private String content;
    
    /**
     * 视频地址
     */
    @Size(max = 500, message = "视频地址长度不能超过500个字符")
    private String videoUrl;
    
    /**
     * 视频时长(秒)
     */
    @Min(value = 0, message = "视频时长不能为负数")
    private Integer videoDuration;
    
    /**
     * 难度级别 1-初级 2-中级 3-高级
     */
    @NotNull(message = "难度级别不能为空")
    @Min(value = 1, message = "难度级别值不正确")
    @Max(value = 3, message = "难度级别值不正确")
    private Integer difficultyLevel = 1;
    
    /**
     * 分类 1-基础入门 2-进阶技法 3-高级创作
     */
    @NotNull(message = "分类不能为空")
    @Min(value = 1, message = "分类值不正确")
    @Max(value = 3, message = "分类值不正确")
    private Integer category;
    
    /**
     * 标签，逗号分隔
     */
    @Size(max = 200, message = "标签长度不能超过200个字符")
    private String tags;
    
    /**
     * 所需工具
     */
    @Size(max = 300, message = "所需工具长度不能超过300个字符")
    private String toolsRequired;
    
    /**
     * 所需材料
     */
    @Size(max = 300, message = "所需材料长度不能超过300个字符")
    private String materialsRequired;
    
    /**
     * 预计完成时间(分钟)
     */
    @Min(value = 0, message = "预计完成时间不能为负数")
    private Integer estimatedTime;
    
    /**
     * 排序号
     */
    @Min(value = 0, message = "排序号不能为负数")
    private Integer sortOrder = 0;
    
    /**
     * 状态 0-草稿 1-已发布 2-已下架
     */
    @NotNull(message = "状态不能为空")
    @Min(value = 0, message = "状态值不正确")
    @Max(value = 2, message = "状态值不正确")
    private Integer status = 0;
    
    /**
     * 是否推荐
     */
    @NotNull(message = "推荐状态不能为空")
    private Boolean isRecommend = false;
    
    /**
     * 是否免费
     */
    @NotNull(message = "免费状态不能为空")
    private Boolean isFree = true;
}